<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <script>

        
        class Person {
            constructor(name) {
                this.name = name;
            }
        }

        class Student extends Person {
            // 属性：
            constructor(name, score) {
                    // this.name = name,
                    // 调用父类,不是使用new Person
                    super(name);
                    this.score = score
                }
                // 方法
            introduce() {
                console.log(`我是类的方法，我的名字是${this.name},成绩是${this.score}`);
            }
        }
        // 调用类Student
        const student = new Student('张三', 99)
            // 打印Student的属性和和方法
        console.log('student', student);//student Student {name: '张三', score: 99}
        // 调用方法
        student.introduce();

        // let myobj = { };
        // myobj["name"]="szq"
        // Object.prototype["age"]=11;
        // console.log(myobj);
        // console.log(myobj.__proto__ === Object.prototype); // Object的实例{}
        // // Object.prototype.constructor=function myconstructor(){
        // //     return "aaa";
        // // }
        // console.log(Object.prototype.__proto__);// null

        // console.log(Object.prototype.constructor);
        // console.log(Object);
        // console.log(Object===Object.prototype.constructor);

        // [[Value]] : 包含这个属性的数据值。读取属性时从这个位置读取；写入属性时，把新值保存在这个位置。这个特性的值默认为 undefined 。
        // [[Writable]] : 表示能否修改属性的值，即值是可写的还是只读。
        // [[Enumaerable]] : 目标属性是否可被枚举（遍历）。
        // [[Configurable]] : 表示能否通过 delete 删除属性、能否修改属性的特性，或者将属性修改为访问器属性。

        // // // // Object.Create 实现机制
        // // Object.myCreate2 = function (obj) {

        // //     let emptyObj = {};
        // //     // 但是__proto__在IE下已被禁用，兼容性不好，所以我们要想其他方法
        // //     emptyObj.__proto__ = obj;
        // //     return emptyObj;

        // //     // function fun2() { }
        // //     // fun2.prototype = obj;
        // //     // let tempObj = new fun2();
        // //     // return tempObj;

        // // }

        // let orginObj = {};
   
        // let myObj = Object.create(orginObj,
        //     {
        //         name: {
        //             value: "szq",
        //             enumerable: true,
        //             writable: true,
        //             configurable: true,
        //         }
        //     }
        // );

        // Object.prototype.objname="szq111";        
        // console.log(myObj);//{}

        // console.log(myObj.__proto__ === orginObj);
        // console.log(orginObj.__proto__);//{}.__proto__
        
        // console.log(Object.prototype);//{}.__proto__=== Object.prototype

        // console.log(Object.prototype.__proto__);// null



    </script>
</head>

<body>

</body>

</html>